package com.zhangxu.microservice.system.biz.service;

import com.zhangxu.microservice.system.biz.dto.AssignRoleResourceDTO;
import com.zhangxu.microservice.system.biz.dto.ResourceDTO;
import com.zhangxu.microservice.system.biz.dto.RolePermissionDTO;
import com.zhangxu.microservice.system.biz.dto.RoleResourceDTO;

import java.util.List;

/**
 * 角色资源权限服务接口
 */
public interface RoleResourceService {

    /**
     * 分配角色资源权限
     *
     * @param assignRoleResourceDTO 分配角色资源权限参数
     */
    void assignRoleResource(AssignRoleResourceDTO assignRoleResourceDTO);

    /**
     * 清空角色的所有资源权限
     *
     * @param roleId 角色ID
     */
    void clearRoleResource(Long roleId);


    /**
     * 获取角色拥有的资源列表
     *
     * @param roleId 角色ID
     * @return 资源列表
     */
    List<ResourceDTO> getRoleResources(Long roleId);

    /**
     * 获取角色拥有的权限标识列表
     *
     * @param roleId 角色ID
     * @return 权限标识列表
     */
    List<String> getRolePermissions(Long roleId);

    /**
     * 获取员工拥有的所有权限（通过角色）
     *
     * @param employeeId 员工ID
     * @return 权限标识列表
     */
    List<String> getEmployeePermissions(Long employeeId);

    /**
     * 获取员工拥有的所有资源（通过角色）
     *
     * @param employeeId 员工ID
     * @return 资源列表
     */
    List<ResourceDTO> getEmployeeResources(Long employeeId);

    /**
     * 检查角色是否拥有指定资源权限
     *
     * @param roleId 角色ID
     * @param resourceCode 资源编码
     * @return 是否拥有权限
     */
    boolean hasRoleResource(Long roleId, String resourceCode);

    /**
     * 检查员工是否拥有指定权限（通过角色）
     *
     * @param employeeId 员工ID
     * @param permission 权限标识
     * @return 是否拥有权限
     */
    boolean hasEmployeePermission(Long employeeId, String permission);

    /**
     * 检查员工是否拥有指定资源权限
     *
     * @param employeeId 员工ID
     * @param resourceCode 资源编码
     * @return 是否拥有权限
     */
    boolean hasEmployeeResource(Long employeeId, String resourceCode);

    /**
     * 获取角色资源权限关联列表
     *
     * @param roleId 角色ID
     * @return 角色资源权限关联列表
     */
    List<RoleResourceDTO> getRoleResourceList(Long roleId);
}